package com.jmyd.sharding.domain.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.jmyd.sharding.annatations.Date2LongSerializer;
import com.jmyd.sharding.domain.po.SysUser;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.util.Date;
import java.util.List;

/**
 * @author samphin
 * @date 2024/6/18 10:46
 */
@Data
public class SysUserVo {
    /**
     * 用户ID
     */
    private Long id;

    /**
     * 登录名称
     */
    private String username;

    /**
     * 登录密码
     */
    private String password;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 真实名称
     */
    private String realName;

    /**
     * 头像
     */
    private String avatar;

    /**
     * 性别0：男 1：女 2：其他
     */
    private Short sex;

    /**
     * 生日
     */
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date birthday;

    /**
     * 邮箱地址
     */
    private String email;

    /**
     * 工牌号
     */
    private String identityCardNo;

    /**
     * 手机号码
     */
    private String telephone;

    /**
     * 身份证号码
     */
    private String idCard;

    /**
     * 状态：1：在职 2：离职 3：停职 4：退休
     */
    private Integer state;

    /**
     * 个性签名
     */
    private String signature;

    /**
     * 用户来源 APP注册-0,H5注册-1,WEB注册-2,管理后台注册-3
     */
    private Short origin;

    /**
     * 0 未认证 1 已认证
     */
    private Boolean auth;

    /**
     * 是否激活1=激活 0=未激活
     */
    private Boolean active;

    /**
     * 用户类型 1:前端用户 2:系统用户
     */
    private Integer type;

    /**
     * 创建时间
     */
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date createTs;

    /**
     * 最后修改时间
     */
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date updateTs;

    /**
     * 优惠券列表
     */
    private List<SysCouponVo> coupons;

    public SysUserVo buildVo(SysUser sysUser, List<SysCouponVo> couponList) {
        BeanUtils.copyProperties(sysUser, this);
        this.setId(sysUser.getId());
        this.setCoupons(couponList);
        return this;
    }
}